/***********************************************************************************
 * 文件名： ly_pid_config.h
 * 作者： 	刘言
 * 版本： 	1
 * 说明：
 * 		面相对象设计的PID算法计算器，注意不要与单例模式的版本 pid_static 同时使用，会出
 * 现命名冲突。
 * 		PID 计算方法： 控制（输出）值的变化量 = 
 * 				  比例系数 * 偏差值 
 * 				+ 积分系数 * 偏差累加值 
 * 				+ 微分系数 * (偏差值 - 上一个偏差值)
 * 		
 * 修改记录：
 * 	20220715：初版。
***********************************************************************************/
#ifndef _LY_PID_CONFIG_H_
#define _LY_PID_CONFIG_H_

#ifdef __cplusplus
extern "C" {
#endif 

// 定义表示启用浮点运算（被控量和控制量都是float型）。
// #define _PID_USE_FLOAT


#ifndef _PID_USE_FLOAT

// 系数的缩小比例
// P.I.D系数将在设置值上除以这个值。建议设置为2的整数倍可以节省代码量。
#define _PID_SCALE           1024

// 以下参数便于 ly_pid 组件在定点计算时确定定点计算采用的变量位数，与实际PID控制无关。

// 被控量（输入）的数据可能的最大值(绝对值)。
// PID组件依据这个值和PID系数来确定整型变量的位数，合理的设置可以节省ROM和RAM。
// 技巧：考虑让PID控制ADC采样值，而不是计算后的电压、温度等。
#define _PID_INPUT_MAX      4095

// 所有实例中可能的比例系数最大值，未启用浮点时单位是1/_PID_SCALE
#define _PID_KP_MAX	    8//0.024
// 所有实例中可能的积分系数最大值，未启用浮点时单位是1/_PID_SCALE
#define _PID_KI_MAX	    0
// 所有实例中可能的微分系数最大值，未启用浮点时单位是1/_PID_SCALE
#define _PID_KD_MAX	    3//0.006

#endif

// 所有实例中可能的偏差累加值（积分）上限，也是每个实例的默认值
#define _PID_MAX_INTE_VALUE	        0
// 所有实例中可能的偏差累加值（积分）下限，也是每个实例的默认值
#define _PID_MIN_INTE_VALUE	        (-0)



//启用动态积分，注释掉表示不启用【未测试】
//#define _PID_USE_DYNAMIC_INTEGRAL		
#ifdef _PID_USE_DYNAMIC_INTEGRAL
	#define _PID_NO_INTEGRAL_VALUE          4		//偏差大于这个值去掉积分
	#define _PID_FULL_INTEGRAL_VALUE	    2		//偏差小于这个值正常积分
	#define _PID_NO_INTEGRAL_IN_START		        //启用“启动时关闭积分”；注释掉表示不启用，积分始终有效。
#endif



#ifdef __cplusplus
}
#endif

#endif
